package org.jadedanha.dao;

import java.sql.*;
import java.util.*;
import org.jadedanha.model.*;

public class JogoDao extends Dao {

    public void save(Jogo jogo) throws SQLException {
        String sql;

        PreparedStatement stm;

        if ( jogo.getId() == null ) {
            sql = "INSERT INTO jogo(assunto) VALUES(?) ";

            stm = this.getConnection().prepareStatement(sql);

            stm.setString(1, jogo.getAssunto() );

            if ( jogo.getId() != null ) {
                stm.setInt(1, jogo.getId() );
            }
        
            stm.execute();
            stm.close();

            jogo.setId(1);
        }

        sql = "DELETE FROM jogador WHERE id_jogo = ?";

        stm = this.getConnection().prepareStatement(sql);

        stm.setInt(1, jogo.getId());

        stm.execute();
        stm.close();

        sql = "INSERT INTO jogador (status, id_usuario, id_jogo) VALUES(?, ?, ?)";

        for (Jogador j: jogo.getJogadores()) {
            stm = this.getConnection().prepareStatement(sql);

            stm.setInt(1, j.getStatus().getNumero());
            stm.setInt(2, j.getId());
            stm.setInt(3, jogo.getId());

            stm.execute();
            stm.close();
        }

        sql = "DELETE FROM turno WHERE id_jogo = ?";

        stm = this.getConnection().prepareStatement(sql);

        stm.setInt(1, jogo.getId());

        stm.execute();
        stm.close();

        sql = "INSERT INTO turno (letra, status, id_jogo) VALUES(?, ?, ?)";

        for (Turno t: jogo.getTurnos()) {
            stm = this.getConnection().prepareStatement(sql);

            stm.setString(1, t.getLetra());
            stm.setInt(2, t.getStatus().getNumero());
            stm.setInt(3, jogo.getId());

            stm.execute();
            stm.close();
        }
    }

    public void delete(Jogo jogo) throws SQLException {
        String            sql = "DELETE FROM jogo WHERE id = ?";
        PreparedStatement stm = this.getConnection().prepareStatement(sql);

        stm.setInt(1, jogo.getId() );

        stm.execute();
        stm.close();
    }

    public List<Jogo> list() throws SQLException {
        List<Jogo>    list = new ArrayList<Jogo>();
        String            sql = "SELECT * FROM jogo ORDER BY assunto";
        PreparedStatement stm = this.getConnection().prepareStatement(sql);
        ResultSet         rs  = stm.executeQuery();

        while (rs.next() ) {
            Jogo j = new Jogo()
                .setId( rs.getInt("id") )
                .setAssunto( rs.getString("assunto") );

            list.add( j );
        }

        return list;
    }

    public static void main(String[] dsaf) {
        UsuarioDao dao = new UsuarioDao();
        Usuario u      = new Usuario()
            .setNome("Joao2")
            .setEmail( new Email("alexander@email.com") )
            .setSenha( new Senha("123")            );

        try {
            dao.save(u);
            System.out.println("Salvou .... aeeeeeee");
        } catch( Exception e ) {
            System.out.println("Deu merda!!!");
            e.printStackTrace();
        }

        try {
            for (Usuario us : dao.list() ) {
                System.out.println( us );
            }
        } catch( Exception e ) {
            System.out.println("Deu merda!!!");
            e.printStackTrace();
        }
    }
}

